# -*- coding: utf-8 -*-

# Autor: Pedro Godinho, n.º 6355
# Data: 02/12/2011

# imports necessários para o tratamento dos dados inseridos na Base de Dados
import sqlite3
from BaseDados import BaseDados

class Dados:
    '''
    Classe responsavel pela criação dos dados que vão ser utilizados para criar as estatisticas
    '''

    def __init__(self):
        '''
        Constructor que abre a Base de Dados e criar listas
        '''
        self.lista = []
        self.anos = []
        self.estabelecimento = []
        self.categoria = []
        self.grau = []
        bd = BaseDados()

        try:
            self.conn = sqlite3.connect('BaseDados.db')
            self.cursor = self.conn.cursor()
            
        except Exception, e:
            print 'Got error %s' % e
            pass

        cmd = ('''select * from dados''')

        try:
            self.cursor.execute(cmd)
            pass
        
        except Exception, e:
            print 'Got error %s' % e
            pass 

        for linha in self.cursor.fetchall():
            
            self.lista.append([linha[bd.CODIGO_DOCENTE].encode('utf-8').replace('¨', '"'),
                         linha[bd.NOME].encode('utf-8').replace('¨', '"'),
                         linha[bd.ULTIMO_GRAU].encode('utf-8').replace('¨', '"'),
                         linha[bd.CURSO].encode('utf-8').replace('¨', '"'),
                         linha[bd.CATEGORIA].encode('utf-8').replace('¨', '"'),
                         linha[bd.REGIME].encode('utf-8').replace('¨', '"'),
                         linha[bd.ANO_LECTIVO],
                         linha[bd.TIPO_ESTABELECIMENTO].encode('utf-8').replace('¨', '"'),
                         linha[bd.NOME_ESTABELECIMENTO].encode('utf-8').replace('¨', '"')])

            
            pass

        self.anos = set()
        self.estabelecimento = set()
        self.categoria = set()
        self.grau = set()

        for linha in self.lista:
            self.anos.add(linha[bd.ANO_LECTIVO])
            self.estabelecimento.add(linha[bd.NOME_ESTABELECIMENTO])
            self.categoria.add(linha[bd.CATEGORIA])
            self.grau.add(linha[bd.ULTIMO_GRAU])
            pass

        self.anos = list(self.anos)
        self.estabelecimento = list(self.estabelecimento)
        self.categoria = list(self.categoria)
        self.grau = list(self.grau)

        self.anos.sort()
        self.estabelecimento.sort()
        self.categoria.sort()
        self.grau.sort()
        
        pass

    def getNDocentesPorEstabelecimentoPorAno(self, estabelecimento, ano):
        '''
        Este método faz uma procura na Base de Dados com os parametros fornecidor e devolve
        o número de docentes por estabelecimento por ano
        '''
    
        cmd = '''select Nome from dados where AnoLectivo = "{0}" and NomeEstabelecimento = "{1}"'''.\
                        format( str(ano).replace( '¨', '"' ), str(estabelecimento).replace( '¨', '"' ))
                                
        self.cursor.execute(cmd)
        r = self.cursor.fetchall()  
        
        return len(r)

    def getNDocentesPorCategoriaPorEstabelecimentoPorAno(self, categoria, estabelecimento, ano):
        '''
        Este método faz uma procura na Base de Dados com os parametros fornecidor e devolve
        o número de docentes por categoria por estabelecimento por ano
        '''
        
        cmd = '''select Nome from dados where AnoLectivo = "{0}" and NomeEstabelecimento = "{1}" and Categoria = "{2}"'''.\
                        format( str(ano).replace( '¨', '"' ), str(estabelecimento).replace( '¨', '"' ), str(categoria).replace( '¨', '"' ))

        self.cursor.execute(cmd)
        r = self.cursor.fetchall()
        
        return len(r)
    
    def getNDocentesPorGrauPorEstabelecimentoPorAno(self, grau, estabelecimento, ano):
        '''
        Este método faz uma procura na Base de Dados com os parametros fornecidor e devolve
        o número de docentes por grau por estabelecimento por ano
        '''
        
        cmd = '''select Nome from dados where AnoLectivo = "{0}" and NomeEstabelecimento = "{1}" and UltimoGrau = "{2}"'''.\
                        format( str(ano).replace( '¨', '"' ), str(estabelecimento).replace( '¨', '"' ), str(grau).replace( '¨', '"' ))

        self.cursor.execute(cmd)
        r = self.cursor.fetchall()
        
        return len(r)
